package domain;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import type.EstadoOrdenType;
import type.NotificacionType;
import dto.OrdenDespachoDTO;

@Entity
@Table(name="despachos")
public class OrdenDespacho implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;


	@Enumerated(EnumType.STRING)
	private EstadoOrdenType estado;
	
	
	private Date fecha;
	@Id @GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="idDespacho")
	private Integer id;
	private int modulo;
	
	private int numeroDespacho;
	

	private int numeroVenta;

	@OneToMany(cascade={CascadeType.ALL})	
	@JoinColumn(name="idDespacho")
	private List<SolicitudArticulo> solicitudesArticulos;
	
	@Enumerated(EnumType.STRING)
	private NotificacionType logisticaMonitoreoEstado;
	
	@Enumerated(EnumType.STRING)
	private NotificacionType portalWebEstado;
	
	public OrdenDespacho() {
		
	}
	public OrdenDespacho(int numero, Date fecha,List<SolicitudArticulo>solicitudes, EstadoOrdenType estado) {
		super();
		this.solicitudesArticulos=new ArrayList<SolicitudArticulo>();
		this.numeroDespacho = numero;
		this.fecha = fecha;
		this.solicitudesArticulos = solicitudes;
		this.estado = estado;
		this.portalWebEstado=NotificacionType.NO_LISTA_PARA_NOTIFICAR;
		this.logisticaMonitoreoEstado=NotificacionType.NO_LISTA_PARA_NOTIFICAR;
	}
	public void agregarItem(SolicitudArticulo solicitud){
		if (this.solicitudesArticulos==null) {
			this.solicitudesArticulos = new ArrayList<SolicitudArticulo>();
		}
		this.solicitudesArticulos.add(solicitud);
	}
	public EstadoOrdenType getEstado() {
		return estado;
	}

	public Date getFecha() {
		return fecha;
	}
	public Integer getId() {
		return id;
	}


	public int getModulo() {
		return modulo;
	}
	
	
	public int getNumeroDespacho() {
		return numeroDespacho;
	}

	public int getNumeroVenta() {
		return numeroVenta;
	}
	public List<SolicitudArticulo> getSolicitudesArticulos() {
		return solicitudesArticulos;
	}
	

	public OrdenDespachoDTO getVista() {
		OrdenDespachoDTO u=new OrdenDespachoDTO();
		u.setEstado(this.getEstado());
		u.setFecha(this.getFecha());
		u.setIdModulo(this.getModulo());
		u.setNumeroDespacho(this.getNumeroDespacho());
		u.setNumeroVenta(this.getNumeroVenta());
		u.setId(this.getId());
		u.setLogisticaMonitoreoEstado(this.getLogisticaMonitoreoEstado());
		u.setPortalWebEstado(this.getPortalWebEstado());
		System.out.print(this.getSolicitudesArticulos().size());
		if (this.solicitudesArticulos!=null) {
			for (SolicitudArticulo s : this.solicitudesArticulos) {
				u.agregarItem(s.getVista());
			}			
		}
		return u;
	}
	public void setEstado(EstadoOrdenType estado) {
		this.estado = estado;
	}
	

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	
	public void setId(Integer id) {
		this.id = id;
	}

	public void setModulo(int modulo) {
		this.modulo = modulo;
	}
	public void setNumeroDespacho(int numeroDespacho) {
		this.numeroDespacho = numeroDespacho;
	}
	public void setNumeroVenta(int numeroVenta) {
		this.numeroVenta = numeroVenta;
	}
	
	public void setSolicitudesArticulos(List<SolicitudArticulo> solicitudesArticulos) {
		this.solicitudesArticulos = solicitudesArticulos;
	}
	public NotificacionType getLogisticaMonitoreoEstado() {
		return logisticaMonitoreoEstado;
	}
	public void setLogisticaMonitoreoEstado(
			NotificacionType logisticaMonitoreoEstado) {
		this.logisticaMonitoreoEstado = logisticaMonitoreoEstado;
	}
	public NotificacionType getPortalWebEstado() {
		return portalWebEstado;
	}
	public void setPortalWebEstado(NotificacionType portalWebEstado) {
		this.portalWebEstado = portalWebEstado;
	}
	
}
